/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.filter;

import br.jm.financeiro.entity.PropostaDocumento;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author MARA NETBOOK
 */
public class UploadArquivo implements Serializable {

    private String diretorio;
    private String caminho;
    private byte[] arquivo;
    private String nome;
    private final static Logger logger = Logger.getLogger(UploadArquivo.class.getName());

    public UploadArquivo() {
    }

    public String getDiretorio() {
        return this.diretorio;
    }

    public void setDiretorio(String diretorio) {
        this.diretorio = diretorio;
    }

    public byte[] getArquivo() {
        return arquivo;
    }

    public void setArquivo(byte[] arquivo) {
        this.arquivo = arquivo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getRealPath() {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();

        FacesContext aFacesContext = FacesContext.getCurrentInstance();
        ServletContext context = (ServletContext) aFacesContext.getExternalContext().getContext();

        return context.getRealPath("/");
    }

    public void fileUpload(FileUploadEvent event, String type, String diretorio) {
        File file = null;
        try {
            this.nome = event.getFile().getFileName(); //new java.util.Date().getTime() + type;
            this.caminho = getRealPath() + diretorio + getNome();
            this.arquivo = event.getFile().getContents();

            file = new File(getRealPath() + diretorio);
            file.mkdirs();

        } catch (Exception ex) {
            //System.out.println("Erro no upload do arquivo" + ex);
            Logger.getLogger(UploadArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void gravar() {

        try {

            FileOutputStream fos;
            fos = new FileOutputStream(this.caminho);
            fos.write(this.arquivo);
            fos.close();

        } catch (Exception ex) {
            //Logger.getLogger(UploadArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void apagar(String cArquivo) {
        try {

            File file = new File(getRealPath().concat("/documento/").concat(cArquivo));
            file.delete();

        } catch (Exception ex) {
            //System.out.println("Erro no Excluir o arquivo" + ex);
            Logger.getLogger(UploadArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public byte[] insertFile(String cArquivo) throws FileNotFoundException, IOException {
        File file = new File(getRealPath().concat("/documento/").concat(cArquivo));
        //converte o objeto file em array de bytes
        FileInputStream is = new FileInputStream(file);
        byte[] bytes = new byte[(int) file.length()];
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length
                && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
            offset += numRead;
        }



        return bytes;
    }
    
    public File getFile(PropostaDocumento selectedPropostaDocumento) throws FileNotFoundException, IOException {
        File f = null;

        byte[] bytes = selectedPropostaDocumento.getArquivo();
        String nomeDoc = selectedPropostaDocumento.getNomDocumento();

        //converte o array de bytes em file
        f = new File(getRealPath().concat("/documento/").concat(nomeDoc));
        try (FileOutputStream fos = new FileOutputStream(f)) {
            fos.write(bytes);
        }
        return f;
    }
}
